<?php
declare(strict_types=1);

/*
示例
.env
APP_DEBUG = true

[DATABASE]
HOST=127.0.0.1

Env::loadFile('.env');
Env::get("APP_DEBUG");
Env::get('database.host');
*/

// 读取 .env 配置文件
class Env
{
    const ENV_PREFIX = "";

    /**
     * 加载文件
     *
     * @param string $filePath .env 文件绝对路径
     * @return void
     * @throws Exception
     */
    public static function loadFile(string $filePath): void
    {
        if (file_exists($filePath) === false) throw new \Exception("{$filePath} 不存在");

        $env = parse_ini_file($filePath, true);
        foreach($env as $key => $val){
            $prefix = self::ENV_PREFIX.strtoupper($key);
            if (is_array($val))
            {
                foreach($val as $k => $v){
                    $item = $prefix . "_" . strtoupper($k);
                    putenv("{$item}={$v}");
                }
            } else {
                putenv("{$prefix}={$val}");
            }
        }
    }// loadFile() end

    /**
     * 获取配置
     *
     * @param string $name
     * @param $default
     * @return array|bool|mixed|string|null
     */
    public static function get(string $name, $default = null)
    {
        $result = getenv(self::ENV_PREFIX.strtoupper(str_replace('.', '_', $name)));
        if (false !== $result)
        {
            if ('false' === $result)
            {
                $result = false;
            } elseif ('true' === $result){
                $result = true;
            }

            return $result;
        }

        return $default;
    }// get() end
}